/*
 * @Author: szx
 * @Date: 2022-03-29 12:39:54
 * @LastEditTime: 2022-03-29 13:02:01
 * @Description:
 * @FilePath: \leetcode\剑指offer\60\60.js
 */
/**
 * @param {number} n
 * @return {number[]}
 */
var dicesProbability = function (n) {
    // 第一次的骰子概率都为 1/6
    let dp = new Array(6).fill(1 / 6);

    // 遍历有多少个骰子
    for (let i = 2; i <= n; i++) {
        // n个骰子对应5n+1个和
        // temp[0] 是每个骰子都是 1 的概率，i 个骰子对应和为 i
        let temp = new Array(5 * i + 1).fill(0);
        // 遍历上一次的骰子每一个和对应的概率
        for (let j = 0; j < dp.length; j++) {
            // 这一次分别摇到 1 - 6，每一次的概率都是 1/6
            for (let k = 0; k < 6; k++) {
                // 相当于上一次的骰子点数之和再加上这次摇到对应的点数的新和的概率
                // 当 j=0，k=0 时，dp[0] 是上一次 n - 1 个骰子都是摇到 1 的概率
                // temp[0] = dp[0] / 6 相当于这一次又摇到 1 的概率
                temp[j + k] += dp[j] / 6;
            }
        }
        // i 个骰子的点数之和转移到 dp
        dp = temp;
    }
    return dp;
};
